Bare-Mux
A system for managing http transports in a project such as Ultraviolet.
Written to make the job of creating new standards for transporting http data seamless.
Implements the TompHTTP Bare client interface in a modular way.
Specifically, this is what allows proxies such as Nebula to switch HTTP transports seamlessly.
A transport is a module that implements the BareTransport
interface.
export interface BareTransport {
init: () => Promise<void>;
ready: boolean;
connect: (
url: URL,
origin: string,
protocols: string[],
requestHeaders: BareHeaders,
onopen: (protocol: string) => void,
onmessage: (data: Blob | ArrayBuffer | string) => void,
onclose: (code: number, reason: string) => void,
onerror: (error: string) => void,
) => [( (data: Blob | ArrayBuffer | string) => void, (code: number, reason: string) => void )] => void;
request: (
remote: URL,
method: string,
body: BodyInit | null,
headers: BareHeaders,
signal: AbortSignal | undefined
) => Promise<TransferrableResponse>;
meta: () => BareMeta
}
Examples of transports include EpoxyTransport, CurlTransport, and Bare-Client.
To switch between transports, use the SetTransport
function.
import { SetTransport } from '@mercuryworkshop/bare-mux';
SetTransport("EpxMod.EpoxyClient", { wisp: "wss://wisp.mercurywork.shop" });
SetTransport("BareMod.BareClient", "https://some-bare-server.com");
If not using a bundler, extract the npm package in releases, and include the bare.cjs
file and call BareMux.SetTransport
.